package com.yang.job.application.service;


import com.yang.job.application.convertor.YangJobDTOConvertor;
import com.yang.job.client.api.YangJobQueryService;
import com.yang.job.client.dto.YangJobDTO;
import com.yang.job.client.dto.common.PageDTO;
import com.yang.job.client.dto.common.Response;
import com.yang.job.client.dto.query.PageYangJobQuery;
import com.yang.job.domain.model.YangJobModel;
import com.yang.job.domain.gateway.repository.IJobModelRepository;
import com.yang.job.domain.gateway.repository.request.JobModelQueryCondition;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class YangJobQueryApplicationService implements YangJobQueryService {
    @Resource
    private IJobModelRepository jobModelRepository;

    @Resource
    private YangJobDTOConvertor yangJobDTOConvertor;

    @Override
    public Response<PageDTO<YangJobDTO>> queryYangJobPage(PageYangJobQuery pageYangJobQuery) {
        JobModelQueryCondition jobModelQueryCondition = convert2JobModelQueryCondition(pageYangJobQuery);
        PageDTO<YangJobModel> modelPageDTO = jobModelRepository.queryYangJobModelPage(jobModelQueryCondition);
        PageDTO<YangJobDTO> pageDTO = new PageDTO<>();
        pageDTO.setPageNo(modelPageDTO.getPageNo());
        pageDTO.setPageSize(modelPageDTO.getPageSize());
        pageDTO.setPages(modelPageDTO.getPages());
        pageDTO.setTotal(modelPageDTO.getTotal());

        List<YangJobDTO> dataList = modelPageDTO.getDataList().stream()
                .map(yangJobDTOConvertor::convert2DTO)
                .collect(Collectors.toList());
        pageDTO.setDataList(dataList);
        return Response.success(pageDTO);
    }

    @Override
    public Response<YangJobDTO> getYangJobDTOById(Integer id) {
        YangJobModel yangJobModel = jobModelRepository.getYangJobModelById(id);
        YangJobDTO yangJobDTO = yangJobDTOConvertor.convert2DTO(yangJobModel);
        return Response.success(yangJobDTO);
    }

    private JobModelQueryCondition convert2JobModelQueryCondition(PageYangJobQuery pageYangJobQuery) {
        JobModelQueryCondition jobModelQueryCondition = new JobModelQueryCondition();
        jobModelQueryCondition.setPageNo(pageYangJobQuery.getPageNo());
        jobModelQueryCondition.setPageSize(pageYangJobQuery.getPageSize());
        jobModelQueryCondition.setOpen(pageYangJobQuery.getOpen());
        return jobModelQueryCondition;
    }
}